package com.lihang.rabbit1.config;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;

/**
 * MyBatis Plus元对象处理器
 * 用于自动填充创建时间、创建人、更新时间和更新人字段
 */
@Component
public class MybatisPlusMetaObjectHandler implements MetaObjectHandler {

    /**
     * 插入操作自动填充
     */
    @Override
    public void insertFill(MetaObject metaObject) {
        // 创建时间
        this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
        // 更新时间
        this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
        
        // 创建人
        this.strictInsertFill(metaObject, "createBy", String.class, getCurrentUsername());
        // 更新人
        this.strictInsertFill(metaObject, "updateBy", String.class, getCurrentUsername());
    }

    /**
     * 更新操作自动填充
     */
    @Override
    public void updateFill(MetaObject metaObject) {
        // 更新时间
        this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
        // 更新人
        this.strictUpdateFill(metaObject, "updateBy", String.class, getCurrentUsername());
    }
    
    /**
     * 获取当前登录用户名
     * 实际项目中应该从安全上下文或会话中获取
     */
    private String getCurrentUsername() {
        // 这里为了演示，返回一个固定的用户名
        // 实际项目中可以从Spring Security Context或Session中获取当前登录用户
        return "admin";
    }
} 